Like many modern programming languages, Ada provides mechanisms for hiding
information and structure. In particular, Ada provides a package
facility that allows the programmer to declare objects in a
package definition and define them in a corresponding package body.
This works well
for functions and procedures. However, in the case of types, implementation
issues (in particular, the need to know the size of exported types) have
led the designers of Ada to force the placement of
private type definitions in the definition package rather than the
implementation package. This means that some implementation details
are present in the package definition for all to see. While not actually
dangerous (the user of the package cannot make use of the information
without recourse to ``Chapter 13'' of the Ada Language Reference
Manual[DOD83]
[1]), this aspect of Ada is certainly unpleasant.
During the development of some Ada programs, FunnelWeb was used to solve this problem. Instead of creating a separate file for the package specification and package body, a single FunnelWeb file was created containing two sections, one for the each package part. The ``private'' part of the package specification was then moved (using a FunnelWeb macro definition) to the section describing the package body. Readers who wished only to read the package specification could read only the first part, which contained a fully documented description not containing the private definition.